package com.ys.day27.p4线程池与并发;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 描述:
 * Callable
 * 之前我们定义的任务都是实现Runnable接口，有缺点：1 无法声明异常，2 无法返回任务执行的结果。我们能不能定义一个带有返回值的任务，并且能够声明异常呢？
 *
 * ​	Callable接口能够解决Runnable接口的缺点，能够声明异常能够返回任务执行的结果。
 *
 * ​	Callable接口：可以立马返回执行的结果，也可以在未来的某一时间段返回执行的结果
 *
 * ​	场景：定义一个实现Callable接口的类，然后创建该类的对象，提交给线程池去执行。
 * @author CodeYang
 * @version 2021/1/6 20:43
 */
public class P1Callable创建线程任务 implements Callable {

    public static void main(String[] args) {

        /**
         * Runnable 接口 没有返回类型,也没有抛出异常,所以 使用Runnable 无法直接返回任务是否执行成功,和抛出执行过程中的异常
         *   public abstract void run();
         */
        /**
         * Callable 与 Executors 线程池搭配使用
         * 接口: 可以有返回类型,也可以抛出异常
         * V call() throws Exception;
         * 开发规范:一般以xxJob去命名
         *
         */

        ExecutorService pool = Executors.newFixedThreadPool(2);
        // 把 实现了Callable对象交给线程池,让线程池去执行
        pool.submit(new P1Callable创建线程任务());
        pool.shutdown();



    }

    @Override
    public Object call() throws Exception {
        System.out.println("一个任务....");
        return null;
    }
}
